package ipdesk.model.notice.action;

import ipdesk.model.notice.bean.NoticeBean;
import ipdesk.model.notice.dao.NoticeDao;
import ipdesk.model.report.promote.bean.PromoteInfoBean;
import ipdesk.model.report.promote.dao.PromoteInfoDao;


import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;

import ecg.util.FileService;
import ecg.util.Time;

public class NoticeRegAction extends ActionSupport implements Preparable, ModelDriven<NoticeBean>
{
	private NoticeBean noticeBean;
	
	FileService fileService = new FileService();
	
	// 상세보기 뷰페이지에서 사용되는 도메인 객체
	private NoticeBean noticeDetail;
	
	public String execute() throws Exception
	{
		String uplodaPathPrefix = getText("path.upload.prefix");
		String basePath = getText("path.upload.notice");
		String totalPath = uplodaPathPrefix + basePath;
		
		String regTime = Time.getDateTime();
		
		String uploadFileName = noticeBean.getUploadFileName();
		
		String realFileName = fileService.saveFile(noticeBean.getUpload(), totalPath, uploadFileName);
		
		noticeBean.setUploadFileName(realFileName);
		noticeBean.setPathName(basePath);
		noticeBean.setWriteTime(regTime);
		
		// 공지사항 insert.
		int lastNoticeSeq = NoticeDao.getInstance().noticeReg(noticeBean);
	
		// 마지막으로 insert된 channel_seq 값을 빈 객체에 저장.		
		noticeBean.setNoticeSeq(lastNoticeSeq);
	
		if(lastNoticeSeq != 0 && noticeBean.getUpload() != null)
		{
			NoticeDao.getInstance().insertFileData(noticeBean);
		}
		
		return SUCCESS;
	}
	
	
	/**
	 * 홍보실적 수정 폼 액션
	 */
	public String executeModifyForm() throws Exception
	{
		/**
		 * 넘어온 noticeSeq를 조건으로 DB에서 데이터를 가져온다.
		 */
		int noticeSeq = noticeBean.getNoticeSeq();
		
		
		noticeDetail = NoticeDao.getInstance().getModifyData(noticeSeq);
		
		return SUCCESS;
	}
	
	
	/**
	 * 공지사항 수정 액션 처리
	 */
	public String executeModify() throws Exception
	{
		/**
		 * 	1. 넘어온 공지사항 SEQ를 조건으로 업로드된 데이터가 있는지 여부를 확인한다.
		 */
		int noticeSeq = noticeBean.getNoticeSeq();
		
		NoticeBean noticeUploadBean = NoticeDao.getInstance().getUploadData(noticeSeq);
		
		// 수정모드에서 파일 업로드를 하는경우중에서
		if(noticeBean.getUpload() != null && (!noticeBean.getUpload().getName().equals("")))
		{
			// 기존에 업로드 된 파일이 존재한다면 기존 파일 삭제처리,  기존 데이터 삭제처리.
			if(noticeUploadBean != null)
			{
				// DB에서 가지고 온 파일에 대한 삭제 처리.
				String fileName = noticeUploadBean.getUploadFileName();
				String pathName = noticeUploadBean.getPathName();
				
				fileService.deleteFile(pathName + fileName);
				
				
				NoticeDao.getInstance().deleteDataOneRow(noticeSeq);
			}
		}
		
		
		// 데이터 업데이트, 파일 업로드 처리.
		String uplodaPathPrefix = getText("path.upload.prefix");
		String basePath = getText("path.upload.notice");
		String totalPath = uplodaPathPrefix + basePath;
		
		String regTime = Time.getDateTime();
		String modifyTime = Time.getDateTime();
		String uploadFileName = noticeBean.getUploadFileName();
		
				
		String realFileName = fileService.saveFile(noticeBean.getUpload(), totalPath, uploadFileName);
		
		
		noticeBean.setUploadFileName(realFileName);
		noticeBean.setPathName(basePath);
		noticeBean.setWriteTime(regTime);
		noticeBean.setModTime(modifyTime);
		
		
		// 공지사항 update
		int result = NoticeDao.getInstance().noticeUpdate(noticeBean);
	
		return SUCCESS;
	}
	
	
	/**
	 * 파일 삭제 액션
	 * @return
	 */
	public String executeFileDelete() throws Exception
	{
		/**
		 * 1. 해당 promoteSeq의 path와 file name을 가지고 온다.
		 * 2. 테이블의 파일 데이터를 지운다.
		 * 3. 업로드 데이터를 지운다.
		 */
		boolean delFlag = NoticeDao.getInstance().fileDelete(noticeBean.getNoticeSeq());
		
		return SUCCESS;
	}
	
	/**
	 * 데이터 삭제 액션
	 * 
	 */
	public String executeDelete() throws Exception
	{
		/**
		 * 1. 해당 promoteSeq의 path와 file name을 가지고 온다.
		 * 2. 테이블의 파일 데이터를 지운다.
		 * 3. consult 데이터를 지운다.
		 * 4. 업로드 데이터를 지운다.
		 */
		
		boolean delFlag = NoticeDao.getInstance().noticeDelete(noticeBean.getNoticeSeq());
		
		return SUCCESS;
	}
	
	public void prepare() throws Exception
	{
		noticeBean = new NoticeBean();
	}
	
	public NoticeBean getModel()
	{
		return noticeBean;
	}
	
	public NoticeBean getNoticeDetail()
	{
		return noticeDetail;
	}


	public void setNoticeDetail(NoticeBean noticeDetail)
	{
		this.noticeDetail = noticeDetail;
	}


	public void validate()
	{
		String contentType = noticeBean.getUploadContentType();
		long fileSize = 0;
		
		if(noticeBean.getUpload() != null)
		{
			fileSize = noticeBean.getUpload().length();
		}
		
		if(!fileService.contentTypeValidate(contentType))
		{
			addFieldError("upload", "업로드할 수 없는 파일 형식입니다");
			return;
		}
		
		
		if(fileSize > Long.parseLong(getText("upload.size")))
		{
			System.out.println(fileSize);
			addFieldError("upload", "업로드 용량을 초과하였습니다.");
			return;
		}
	}
}
